public class I如何把十进制数长整型分别以二进制和十进制输出 {

    /**
     * 如何把十进制数（long型）分别以二进制和十六进制形式输出
     */

    /**
     * 由于十进制数本质上还是以二进制的方式来存储的，在实现时可以把十进制数看成二进制的格式，
     * 通过移位的方式计算出每一位的值。为了方便起见，下面以Byte类型的数为例介绍实现方法，
     * 假如现在要把十进制数7以二进制的形式来输出，由于7的二进制表示为00000111，
     * 计算第六位二进制码是0还是1的方法为：首先把这个值左移6位得到11000000，然后再右移7位，得到00000001，
     * 移位后得到的值就是第六位二进制码的值。
     * 由此可以得出如下计算方法：假设十进制数对应的二进制数的长度为binNum，
     * 那么计算十进制数n的第i位二进制码值的公式为n＜＜i＞＞binNum-1。通过这种计算方法可以得到每一位的值，
     * 然后把对应的值存储在字符数组中即可。上面介绍的方法使用的是移位操作，虽然效率比较高，但是难以理解。
     * 下面介绍一种简单的转换为十六进制的方法。可以使用类似于十进制转二进制的方法。把十进制的数对16求余数。
     * 得到的结果就十六进制的最后一位，然后把这个十进制数除以16，用得到的数继续使用相同的方法计算其他的位数。
     * 需要注意的是对于十六进制10～15需要转换为A～F。实现代码如下
     */

    public static String int_to_binary(long n){
        if (n < 0) {
            System.out.println("不支持负数");
            return "";
        }

        int hexNum=8*8;//二进制的位数（long占8个字节）
        StringBuilder pBinary=new StringBuilder("");
        long tmpBinary;
        for (int i = 0; i < hexNum; i++) {
            //先左移i位把pBinary[i]移到最高位，最后右移hexNum-1位把pBinary[i]移到最后一位
            tmpBinary=(n<<i)>>(hexNum-1);//这一步就是为了拿第i为数为0还是1
            if (tmpBinary == 0) {
                pBinary.append('0');
            }else {
                pBinary.append('1');
            }
        }
        return pBinary.toString();
    }

    public static String intToHex(int s){
        StringBuilder hex=new StringBuilder();
        int remainder;
        while (s != 0) {
            remainder=s%16;
            if (remainder < 10) {
                hex.insert(0,(char)(remainder+'0'));
            }else {
                hex.insert(0,(char)(remainder-10+'A'));
            }
            s=s>>4;//右移掉一个16
        }
        return hex.toString();
    }

    public static void main(String[] args) {
        System.out.println(Integer.MAX_VALUE);
    }
}
